package com.acgist.polaris;

import java.io.IOException;
import java.util.List;

import com.acgist.polaris.entity.StreamEntity;

/**
 * <p>压缩机</p>
 * 
 * @param <I> 输入类型
 * @param <O> 输出类型
 * 
 * @author acgist
 */
public interface Compressor<I, O> {

	/**
	 * <p>压缩</p>
	 * 
	 * @param input 输入
	 * @param output 输出
	 * 
	 * @throws IOException IO异常
	 */
	void gc(I input, O output) throws IOException;
	
	/**
	 * <p>解压</p>
	 * 
	 * @param input 输入
	 * @param output 输出
	 * 
	 * @throws IOException IO异常
	 */
	void ungc(I input, O output) throws IOException;
	
	/**
	 * <p>查看</p>
	 * 
	 * @param input 输入
	 * 
	 * @return 实体列表
	 * 
	 * @throws IOException IO异常
	 */
	List<StreamEntity> list(I input) throws IOException;
	
}
